﻿using ERPPublic;
using MediatR;
using Newtonsoft.Json;
using ProcurementManagement.Applcation.Command.ProcureEnquiryCommand;
using ProcurementManagement.Domain.Dtos;
using ProcurementManagement.Infrstructre.Interface;
using SqlSugar;
using static ERPPublic.ParseAPI;

namespace ProcurementManagement.Applcation.CommandHanlers.ProcureEnquiryCommandHandlers
{
    public class ProcureEnquiryLuFangCommandHandlers : IRequestHandler<ProcureEnquiryLuFangCommand, List<ProcureEnquirySelectOutputDto>>
    {
        protected readonly IProcureEnquiryRepository repository;
        protected readonly ISqlSugarClient db;

        public ProcureEnquiryLuFangCommandHandlers(IProcureEnquiryRepository repository, ISqlSugarClient db)
        {
            this.repository = repository;
            this.db = db;
        }

        public async Task<List<ProcureEnquirySelectOutputDto>> Handle(ProcureEnquiryLuFangCommand request, CancellationToken cancellationToken)
        {
            List<Products> products = await GetProductList("", "", 1, 1000);
            var list = (await repository.GetAll()).Where(x => x.IsDel == false && x.IsState == true).ToList();
            var newlist = (from a in products
                           join b in list on a.ProductId equals b.ProductId
                           select new ProcureEnquirySelectOutputDto
                           {
                               ProcureEnquiryId = b.ProcureEnquiryId,
                               PEDocumentsNumber = b.PEDocumentsNumber,
                               PEPricingPeople = b.PEPricingPeople,
                               PEInquiryClerk = b.PEInquiryClerk,
                               PEInquiryDate = b.PEInquiryDate,
                               ProductId = a.ProductId,
                               PENum = b.PENum,
                               PEPrice = b.PEPrice,
                               PETaxRate = b.PETaxRate,
                               IsState = b.IsState,
                               PName = a.PName,
                               PSpec = a.PSpec
                           }).ToList();
            return newlist;
        }

        /// <summary>
        /// 显示产品信息
        /// </summary>
        /// <param name="PName"></param>
        /// <param name="PNumber"></param>
        /// <param name="pindex"></param>
        /// <param name="psize"></param>
        /// <returns></returns>
        public async Task<dynamic> GetProductList(string? PName, string? PNumber, int pindex, int psize)
        {
            string token = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiI1MCIsInNpZCI6IjE4NjcwOTU3MzQ0NjIwNTg0OTYiLCJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL3dzLzIwMDgvMDYvaWRlbnRpdHkvY2xhaW1zL2dyb3Vwc2lkIjoiMTksMTkiLCJqdGkiOiI1MGYyMWRmZS0yNWQ3LTQ1OTQtOTg1Yi0wZTM2MDhhZjJiNmYiLCJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93cy8yMDA1LzA1L2lkZW50aXR5L2NsYWltcy9uYW1lIjoi5LuY5rSb5ZiJIiwiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3MvMjAwNS8wNS9pZGVudGl0eS9jbGFpbXMvdXJpIjoiLyIsImlzcyI6IlJlbmFvYm8yMDA0IiwiYXVkIjoiV2VpZnV3dTIyMDNBIn0._wh23n1M7asMGST9NyeZj-5rk5ICAiOFv6yDk6e2o7Y";
            HttpClientWrapper cilent = new HttpClientWrapper(token);

            string chanpin = "http://116.205.121.197:8000/erpcp/api/Product/ProductShow?PName=" + PName + "&PNumber=" + PNumber + "&ProductTypeId=" + 0 + "&PageIndex=" + pindex + "&PageSize=" + psize;

            string postReponse = await cilent.GetAsync(chanpin);
            var json = JsonConvert.DeserializeObject<ApiResultList<Products>>(postReponse);
            return json.data.list;
        }


        //产品
        public class Products
        {
            /// <summary>
            /// 产品Id
            /// </summary>
            [SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
            public int ProductId { get; set; }
            /// <summary>
            /// 标识
            /// </summary>

            public int? PCharacteristic { get; set; }
            /// <summary>
            /// 产品编号
            /// </summary>
            [SugarColumn(ColumnDataType = "Nvarchar(50)")]//设计长度
            public string? PNumber { get; set; }
            /// <summary>
            /// 产品名称
            /// </summary>
            /// 
            [SugarColumn(ColumnDataType = "Nvarchar(50)")]//设计长度
            public string? PName { get; set; }
            /// <summary>
            /// 规格型号
            /// </summary>
            /// 
            [SugarColumn(ColumnDataType = "Nvarchar(50)")]//设计长度
            public string? PSpec { get; set; }
            /// <summary>
            /// 单位
            /// </summary>
            /// 
            [SugarColumn(ColumnDataType = "Nvarchar(50)")]//设计长度
            public string? PUnit { get; set; }

            /// <summary>
            /// 产品分类ID
            /// </summary>

            public int ProductTypeId { get; set; }




        }
    }
}
